package com.androwit.engine.mapping;

/**
 * Implemented by enumerations that define the mapped fields
 * 
 * @param <J>
 *            the java side type of the field
 * @param <K>
 *            the persistence side type of the key
 * @param <V>
 *            the persistence side type of the value
 * 
 * @author Zied Hamdi Founder of http://1vu.fr,  Zied Hamdi
 * 
 */
public interface MappingField<J, K, V> {

	/**
	 * returns the converter for the field
	 * 
	 * @return
	 */
	Converter<J, V> getConverter();

	/**
	 * returns the name of the bean property
	 * 
	 * @return
	 */
	String getName();

	/**
	 * Returns the persistence key column
	 * 
	 * @return the persistence key (e.g: the column name)
	 */
	K getKey();

	/**
	 * says if the field is handled in a custom way (no automatic binding is
	 * done)
	 * 
	 * @return true if the user wants to handle this field specifically
	 */
	boolean handledSpecifically();

}
